package cliente.varejo;

import interfaces.varejo.IVarejo;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import javax.swing.JTextArea;

/**
 * Representa um cliente no varejo
 * @author Emerson Shigueo Sugimoto
 * */
public class ClienteVarejo {
	private IVarejo _ivare;
	private VisualCheckerCallBack _checker;
	private int _idProduto, _quantidade;
	private JTextArea _jta;
	private String _ip, _nomeServico;
	private int _porta;
	
	public void setNomeServico(String nomeServico) {this._nomeServico = nomeServico;}
	public String getNomeServico() {return _nomeServico;}
	public void setPorta(int porta) {this._porta = porta;}
	public int getPorta() {return _porta;}
	public void setChecker(VisualCheckerCallBack checker) {this._checker = checker;}
	public VisualCheckerCallBack getChecker() {return _checker;}
	public void setIntVar(IVarejo msg) {this._ivare = msg;}
	public IVarejo getIntVar() {return _ivare;}
	public void setIp(String ip) {this._ip = ip;}
	public String getIp() {return _ip;}
	public void setJta(JTextArea jta) {this._jta = jta;}
	public JTextArea getJta() {return _jta;}
	public void setIdProduto(int idProduto) {this._idProduto = idProduto;}
	public int getIdProduto() {return _idProduto;}
	public void setQuantidade(int quantidade) {this._quantidade = quantidade;}
	public int getQuantidade() {return _quantidade;}
	
	/**
	 * construtor
	 * */
    public ClienteVarejo(String ip, int porta, String nomeServico, JTextArea jta) throws RemoteException, NotBoundException {
    	setIp(ip);
    	setPorta(porta);
    	setNomeServico(nomeServico);
    	setJta(jta);
    }
    
    /**
     * inicio
     * */
    public void iniciar() throws RemoteException, NotBoundException {
    	print("Criando cliente varejo ["+getIp()+":"+getPorta()+" - "+getNomeServico()+"]");
        final Registry registry = LocateRegistry.getRegistry(getIp(), getPorta()); /*ip, porta*/
        setIntVar((IVarejo) registry.lookup(getNomeServico()));
        setChecker(new VisualCheckerCallBack(getIntVar(), getJta()));
        //espera o call back
        getIntVar().Comprar(getChecker(), getIdProduto(), getQuantidade());
    }
    
    private void print(String msg){
    	if (getJta()==null){System.out.println(msg);return;}
    	getJta().setText(msg + "\n" + getJta().getText());
    }
    
}